/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package chequeTeatinos.beans;

import chequeTeatinos.ejb.ClienteFacade;
import chequeTeatinos.entities.Cliente;
import java.io.Serializable;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Email;

/**
 *
 * @author masterinftel11
 */
@ManagedBean(eager=true)
@SessionScoped
public class LoginBean implements Serializable{
    @EJB
    private ClienteFacade clienteFacade;

    @Email
    private String email;
    
    @NotNull
    private String password;
    
    private String password2;

    private String error;
    
    private int logged;
    
    private Cliente cli;
    
    private String nombre;
    
    private String apellidos;

    private String numero;

    public LoginBean() {
        logged = 0;
    }

    public String doLogin() {
        Cliente c = clienteFacade.find(email);
        if (c == null){
            error = "Ese usuario no existe";
            return "login";
        }
        
        if (!c.getPass().equals(this.password)){
            error = "Password incorrecto";
            return "login";
        }
        error = "";
        logged = 1;
        cli = c;
        this.nombre = cli.getNombre();
        this.apellidos = cli.getApellidos();
        this.numero = String.valueOf(cli.getTelefono());
        return "home?faces-redirect=true";
    }

    public String doLoginAdmin() {
        Cliente c = clienteFacade.find(email);
        if (c == null){
            error = "Ese usuario no existe";
            return "admin"; 
       }
        if (!c.getPass().equals(this.password)){
            error = "Password incorrecto";
            return "admin";
        }
        if (c.getEsAdmin() == 0){
            error = "No eres administrador, no puedes entrar aquí";
            return "admin";
        }
        error = "";
        logged = 1;
        cli = c;
        this.nombre = cli.getNombre();
        this.apellidos = cli.getApellidos();
        this.numero = String.valueOf(cli.getTelefono());
        return "offersadmin?faces-redirect=true";
    }
    
    public String doLogout() {
        cli = null;
        email = null;
        password = null;
        nombre = null;
        numero = null;
        apellidos = null;
        error = null;
        logged = 0;
        error = "";
        CartBean c = (CartBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("cartBean");
        c.vaciarCarrito();
        return "home.jsf?faces-redirect=true";
    }
    
    public String doSignup() {
        Cliente c = clienteFacade.find(this.email);
        if (c != null){
            error = "Ese e-mail ya está registrado";
            return "signup";
        }
        if (!password.equals(password2)){
            error = "Las contraseñas no coinciden";
            return "signup";
        }
        error = "";
        c = new Cliente(this.email);
        if (this.apellidos != null)
            c.setApellidos(this.apellidos);
        else
            c.setApellidos("");
        c.setEsAdmin(Short.valueOf("0"));
        c.setNombre(this.nombre);
        c.setPass(this.password);
        if (this.numero != null && !"".equals(this.numero))
            c.setTelefono(Integer.valueOf(this.numero));
        else
            c.setTelefono(0);
        clienteFacade.create(c);
        this.doLogin();
        return "signupSuccess";
}

    public String modify() {
        //TODO setters de cli con los nuevos datos y clienteFacade.modify(cli). Comprobar también la contraseña
        if (!this.password.equals(cli.getPass())){
            error = "Contraseña incorrecta";
            return "account";
        }
        error = "";
        cli.setNombre(this.nombre);
        if (this.apellidos != null && !"".equals(this.apellidos))
            cli.setApellidos(this.apellidos);
        cli.setEmail(this.email);
        cli.setTelefono(Integer.parseInt(this.numero));
        clienteFacade.edit(cli);
        return "account";
    }
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    
    public String getPassword2() {
        return password2;
    }

    public void setPassword2(String password2) {
        this.password2 = password2;
    }
    
    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }
    
    
    public int getLogged() {
        return logged;
    }

    public void setLogged(int esAdmin) {
        this.logged = esAdmin;
    }

    public Cliente getCli() {
        return cli;
    }

    public void setCli(Cliente cli) {
        this.cli = cli;
    }
    
    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

}
